package com.huluobo.day_1_lifecycledemo.lifecycle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.huluobo.day_1_lifecycledemo.viewmodel.ADViewModel;
import com.huluobo.day_1_lifecycledemo.MainActivity;
import com.huluobo.day_1_lifecycledemo.R;

/**
 * 父类实现过被观察者接口(宿主) 所以在类上不需要实现接口,但是需要写订阅关系
 * getLifecycle().addObserver(adManager);//订阅关系
 * <p>
 * Lifecycle总结:
 * 1.如果需要使用Lifecycle,首先需要实现一个借口:LifecycleObserver 让他可以去感知宿主的生命周期 (观察者)
 * 2.需要一个宿主,LifecycleOwner,一般来讲AppCompatActivity 已经实现了宿主的接口,可以直接使用,不需要再实现 (被观察者)
 * 3.通过getLifecycle().addObserver(xxx),产生订阅关系 (订阅关系)
 * 4.可以有效解决在宿主对象中控制其他控件的生命周期,让观察者可以根据宿主的生命周期自行做出判断来调用某些方法(创建和销毁)
 */

public class ADActivity extends AppCompatActivity {

    private TextView time;//展示倒计时的text

    private Button go;//跳过按钮

    private ADManager adManager;//倒计时管理器

    private ADViewModel adViewModel;//倒计时数据的viewModel

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_adactivity);

        time = findViewById(R.id.time);
        go = findViewById(R.id.btn_go);

        adViewModel = new ViewModelProvider(this).get(ADViewModel.class);//获取viewModel

        adManager = new ADManager(adViewModel);//初始化倒计时管理器时,传入viewModel
        getLifecycle().addObserver(adManager);//订阅关系

        //观察ViewModel中LiveData的数值变化
        adViewModel.getTimingResult().observe(this, new Observer<Long>() {
            //当liveData的值改变时,会产生此回调
            @Override
            public void onChanged(Long aLong) {
                time.setText("广告剩余时间:" + aLong + "秒");
                adViewModel.millisInFuture = aLong * 1000;
                if (aLong == 0) {
                    Intent intent = new Intent(ADActivity.this, MainActivity.class);
                    startActivity(intent);
                }
            }
        });
        go.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ADActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }
}